import { useUserStore } from '@/stores/userStore'

let ws = null;
const callbackMap = new Map(); // 存储 sequenceId -> 回调函数
let heartbeatInterval = null;  // 存储心跳检测的定时器
const heartbeatTimeout = 10000;  // 心跳检测间隔，10秒
let globalMessageHandler = null; // 全局消息处理函数

// 初始化 WebSocket 连接
const initWebSocket = () => {
  if (ws) return ws;  // 如果连接已经建立，直接返回

  ws = new WebSocket('ws://localhost:8080');  // 建立 WebSocket 连接

  ws.onopen = () => {
    console.log('WebSocket 连接成功！');
    startHeartbeat();  // 连接成功后启动心跳检测
  };

  ws.onerror = (error) => {
    console.error('WebSocket 发生错误:', error);
  };

  ws.onclose = () => {
    console.log('WebSocket 连接关闭');
    stopHeartbeat();  // 关闭连接时停止心跳检测
  };

  // 监听服务器响应信息
  ws.onmessage = (event) => {
    try {
      const response = JSON.parse(event.data);
      console.log('收到服务器响应:', response);

      // 执行对应的回调函数
      const callback = callbackMap.get(response.sequenceId);
      if (callback) {
        callback(response); // 调用对应的回调函数
        callbackMap.delete(response.sequenceId); // 删除该回调，避免泄漏
      } else if (globalMessageHandler) {
        globalMessageHandler(response); // 调用全局消息处理函数
      } else {
        console.warn('未找到对应的回调函数:', response);
      }
    } catch (error) {
      console.error('处理响应时发生错误:', error);
    }
  };

  return ws;
};

// 发送消息函数 + 注册回调
const sendMessage = (message, callback) => {
  if (!ws || ws.readyState !== WebSocket.OPEN) {
    console.error('WebSocket 未连接');
    return;
  }

  // 确保 message 包含 sequenceId
  if (!message.sequenceId) {
    console.error('消息未包含有效的 sequenceId');
    return;
  }

  // 注册回调函数
  if (callback) {
    callbackMap.set(message.sequenceId, callback);
  }

  console.log('发送消息:', message);
  ws.send(JSON.stringify(message));  // 发送消息
};

// 启动心跳检测
const startHeartbeat = () => {
  const userStore = useUserStore()
  if (heartbeatInterval) return; // 如果心跳已在运行，跳过

  heartbeatInterval = setInterval(() => {
    const message = {
      sequenceId: Date.now(),  // 使用当前时间戳作为 sequenceId
      messageType: 6,  
      username: userStore.username
    };
    if(userStore.username===''){
        return;
    }
    console.log('发送心跳消息:', message);
    sendMessage(message);  // 发送心跳消息
  }, heartbeatTimeout); // 每 30 秒发送一次
};

// 停止心跳检测
const stopHeartbeat = () => {
  if (heartbeatInterval) {
    clearInterval(heartbeatInterval);
    heartbeatInterval = null;
  }
};

// 关闭 WebSocket 连接
const closeWebSocket = () => {
  if (ws) {
    ws.close();
    ws = null;
  }
};

// 设置全局消息处理函数
const setGlobalMessageHandler = (handler) => {
  globalMessageHandler = handler;
};

export default {
  initWebSocket,
  sendMessage,
  closeWebSocket,
  startHeartbeat,
  stopHeartbeat,
  setGlobalMessageHandler
};